package com.sprouting.personal.interfaces.common;

import com.sprouting.personal.model.entity.MemberFamily;

/**
 * 基础常量
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2022/7/18 13:47
 */
public interface Constant {


    /**
     * 基础常量
     */
    interface Base{
        /**
         * 系统前缀
         */
        String SYS_PREFIX = "/ps";
        /**
         * 公共的盘符，用 File.separator 在不同系统间解析有异常，用 \\ 会在windows上解析异常
         */
        String DISK_SYMBOL = "/";
        /**
         * 连接-心跳
         */
        String PING = "ping";
        /**
         * 连接-心跳返回
         */
        String PONG = "pong";
    }

    /**
     * 默认值
     */
    interface DefaultValue {
        /**
         * 默认家庭排行，1表示老大
         */
        Integer FAMILY_SORT = 1;
        /**
         * 默认的数值，这个参数主要是给数据库的默认值，数据库数据为null的时候优化效果不好
         */
        String STRING = "-1";
        /**
         * 默认的数值，这个参数主要是给数据库的默认值，数据库数据为null的时候优化效果不好
         */
        Integer INT = -1;
        /**
         * 默认的排序
         */
        Integer ORT = 99;
        /**
         * 默认的排序
         */
        Double SORT = 99.0;
        /**
         * 封装的数据内置数据都是这个开头的
         */
        String BUILT_DATA = "__";
        /**
         * 系统自动操作用户
         */
        String SYS_USER = "sys";
        /**
         * 超级管理员顶级ID
         */
        String ROOT = "1553764000786944000";
        /**
         * 普通角色ID
         */
        String ORDINARY = "1553765064005259264";
        /**
         * 未知的名字，如果家庭成员不知道名字，则使用该默认的参数，这样来防止空数据和判断
         */
        String UNKNOWN_NAME = "UNKNOWN_NAME_DEFAULT";
        /**
         * 未知的名字中文
         */
        String UNKNOWN = "未知";
    }

    /**
     * 编码类型
     */
    interface Encoded {
        /**
         * 编码类型 - utf-8 默认
         */
        String UTF = "UTF-8";
        /**
         * 编码类型 iso-8859-1
         */
        String ISO_8859_1 = "ISO-8859-1";
    }

    /**
     * 常用操作系统类型
     */
    interface SYS{
        /**
         * linux 系统
         */
        String SYS_TYPE_LINUX = "linux";
        /**
         * win 系统
         */
        String SYS_TYPE_WIN = "win";
    }

    /**
     * 性别
     */
    interface Sex{
        /**
         * 性别 - 女性
         */
        Integer FEMALE = 0;
        /**
         * 性别 - 男性
         */
        Integer MALE = 1;
        /**
         * 性别 - 未知
         */
        Integer UNKNOWN = 9;
    }


    /**
     * 数据有效性
     */
    interface DelType {
        /**
         * 新增，有效的
         */
        Integer ADD = 0;
        /**
         * 已逻辑删除
         */
        Integer DEL = 2;
    }

    /**
     * 是、否
     */
    interface YesOrNo {
        /**
         * 不是
         */
        Integer NO = 1;
        /**
         * 是
         */
        Integer YES = 2;
    }

    /**
     * 是否基础数据
     */
    interface BaseData {
        /**
         * 不是
         */
        Integer NO = 1;
        /**
         * 是基础数据 - 不可以修改，不可以删除
         */
        Integer YES_BASE = 2;
        /**
         * 是基础数据，可以修改，不可删除
         */
        Integer YES = 3;
    }

    /**
     * 是否家庭成员
     */
    interface MemberOfFamily {
        /**
         * 创建者
         */
        Integer CREATOR = 1;
        /**
         * 家庭成员
         */
        Integer FAMILY = 2;
        /**
         * 非家庭成员
         */
        Integer OTHER = 3;
    }

    /**
     * 家庭成员类型
     */
    interface MemberType{
        /**
         * 创建者
         */
        // String CREATOR = "0";
        /**
         * 子女
         */
        String SON = "602";
        /**
         * 配偶
         */
        String SPOUSE = "601";
        /**
         * 父母兄弟姐妹
         */
        String PARENT = "603";
    }

    /**
     * 保留字典组代码
     */
    interface RetainDictGroup {
        /**
         * 账单类型
         */
        String BILLING_TYPE = "500";
        /**
         * 家庭成员
         */
        String MEMBER_OF_FAMILY = "600";
        /**
         * 书籍组
         */
        String BOOK_GROUP = "700";
        /**
         * 音乐
         */
        String MUSIC_GROUP = "800";
        /**
         * 应用软件
         */
        String SOFTWARE_GROUP = "900";
        /**
         * 网址
         */
        String WEB_GROUP = "1000";
        /**
         * 游戏
         */
        String GAME_GROUP = "1100";
        /**
         * 购物
         */
        String SHOPPING_GROUP = "1200";
        /**
         * 密码类型
         */
        String PASSWORD_GROUP = "1300";
        /**
         * 社交网络-人际关系
         */
        String SOCIAL_NETWORKS_GROUP = "1400";
        /**
         * 影视类型
         */
        String MOVIES_GROUP = "1500";
        /**
         * 记事类型
         */
        String NOTEPAD_GROUP = "1600";
        /**
         * 家庭作业
         */
        String HOMEWORK_GROUP = "1700";
    }

    /**
     * 配置信息代码，基础代码
     */
    interface ConfigCode {
        /**
         * 阅读地址
         */
        String READING_ADDRESS = "101";
        /**
         * 事件地点
         */
        String EVENT_ADDRESS = "102";
        /**
         * 服务器映射的资源- 只会有一个，不会复制到个人环境中
         */
        String VIDEO_MAPPING_RESOURCE = "103";
        /**
         * 直播地址
         */
        String LIVE_BROADCAST = "104";
        /**
         * 天气的查询地址
         */
        String WEATHER_QUERY = "105";
        /**
         * 生日默认多久进行提醒
         */
        String BIRTHDAY_REMINDER = "106";
        /**
         * 观影地址
         */
        String VIEWING_ADDRESS = "107";
        /**
         * 支付方式
         */
        // String PAYMENT_METHOD = "108";
        /**
         * 默认的支付位置
         */
        String PAYMENT_LOCATION = "109";
        /**
         * 注册页面
         */
        String REGISTER_PAGE = "110";
        /**
         * 数据库备份
         */
        String DATABASE_BACKUP = "111";
        /**
         * 天气用到的key
         */
        String WEATHER_KEY = "112";
        /**
         * 服务器映射的本地PDF资源路径
         */
        String PDF_PATH = "113";

    }

    /**
     * 阅读进度(影视和书籍都使用)
     */
    interface ReadingProgress {
        /**
         * 计划中-准备看
         */
        Integer PLANNED = 1;
        /**
         * 阅读中断-不会继续阅读
         */
        Integer INTERRUPT_STOP = 2;
        /**
         * 阅读暂停-停止阅读后续会继续阅读
         */
        Integer INTERRUPT_CONTINUE = 3;
        /**
         * 阅读完成-完整的看完了整本书
         */
        Integer COMPLETE = 9;
    }

    /**
     * 书籍写作进度
     */
    interface WritingProgress {
        /**
         * 书本被404
         */
        Integer BLOCK = 1;
        /**
         * 太监
         */
        Integer EUNUCH = 2;
        /**
         * 已完结
         */
        Integer END = 3;
    }

    /**
     * 登录方式，设备标识
     */
    interface LoginType {
        /**
         * 电脑
         */
        String PC = "pc";
        /**
         * 微信小程序
         */
        String WX = "wx";
        /**
         * 客户端
         */
        String CLIENT = "client";
    }

    /**
     * 软件运行平台
     */
    interface SoftwarePlatform {
        /**
         * 手机
         */
        Integer APP = 1;
        /**
         * 小程序
         */
        Integer APPLET = 2;
        /**
         * Windows
         */
        Integer WIN = 3;
        /**
         * 苹果
         */
        Integer APPLE = 4;
        /**
         * Linux平台
         */
        Integer LINUX = 5;
        /**
         * 其他
         */
        Integer OTHER = 9;
    }

    /**
     * 上传的文件类型
     */
    interface FileType {
        /**
         * 文本文件
         */
        Integer TXT = 1;
        /**
         * 图片文件
         */
        Integer IMG = 2;
        /**
         * 音频文件
         */
        Integer MP3 = 3;
        /**
         * 视频文件
         */
        Integer MP4 = 4;
    }

    /**
     * 文件资源类型，是从哪个表来的
     */
    interface FileSourceType {
        /**
         * 购物
         */
        Integer SHOPPING_CART = 1;
        /**
         * 记事本
         */
        Integer NOTEPAD = 2;
        /**
         * 社交圈人员照片，指向 {@link MemberFamily#getId()}
         */
        Integer SOCIAL_CIRCLE_USER = 3;
    }

    /**
     * 日历
     */
    interface Calendar {
        /**
         * 阴历
         */
        Integer LUNAR_CALENDAR = 1;
        /**
         * 阳历
         */
        Integer SOLAR_CALENDAR = 2;
    }

    /**
     * 生日时间类型
     */
    interface BirthdayTimeType {
        /**
         * 年月日 yyyy-MM-dd
         */
        Integer INTACT = 1;
        /**
         * 月-日 MM-dd
         */
        Integer MONTH = 1;
    }

    /**
     * 事件级别
     */
    interface EventLevel {
        /**
         * 特别重大事件-关键事件
         */
        Integer CORE = 10;
        /**
         * 重大事件
         */
        Integer LINCHPIN = 20;
        /**
         * 较大事件
         */
        Integer MAJOR = 30;
        /**
         * 一般事件
         */
        Integer COMMONLY = 40;
    }

    /**
     * 事件的重要级别
     */
    interface ImportanceLevel {
        /**
         * 核心级的重要事情
         */
        Integer CORE = 0;
        /**
         * 重要紧急
         */
        Integer IMPORTANT_EMERGENCY = 1;
        /**
         * 不重要但紧急
         */
        Integer NO_IMPORTANT_EMERGENCY = 2;
        /**
         * 重要但不紧急
         */
        Integer IMPORTANT_NO_EMERGENCY = 3;
        /**
         * 不重要不紧急
         */
        Integer NO_IMPORTANT_NO_EMERGENCY = 4;
    }

    /**
     * 账单组重要性
     */
    interface Importance {
        /**
         * 核心
         */
        Integer CORE = 1;
        /**
         * 重要
         */
        Integer LINCHPIN = 2;
        /**
         * 一般
         */
        Integer ORDINARY = 5;
    }

    /**
     * 是否临时文件，临时文件默认会在48小时后删除
     */
    interface TempFile {
        /**
         * 默认值，临时文件
         */
        Integer TEMP = 0;
        /**
         * 生产，已经进入生产环境
         */
        Integer PRODUCTION = 1;
    }

    /**
     * 标记的颜色
     */
    interface MarkColor {
        /**
         * 红色
         */
        Integer RED = 1;
        /**
         * 蓝色
         */
        Integer BLUE = 2;
        /**
         * 黄色
         */
        Integer YELLOW = 3;
        /**
         * 紫色
         */
        Integer PURPLE = 4;
        /**
         * 无色
         */
        Integer NOTHING = 9;
    }

    /**
     * 收入还是开支
     */
    interface RevenueExpense {
        /**
         * 支出
         */
        Integer EXPENDITURE = 1;
        /**
         * 收入
         */
        Integer INCOME = 2;
    }

    /**
     * 支出方式
     */
    interface ExpenditureType {
        /**
         * 线上
         */
        Integer ON_LINE = 1;
        /**
         * 线下
         */
        Integer OFFLINE = 2;
    }

    /**
     * 任务计划类型
     */
    interface TaskPlanType {
        /**
         * 固定任务，只要年月日
         */
        int FIXED_YYMMDD = 10;
        /**
         * 固定任务，年月日时分秒
         */
        int FIXED_YYYYMMDDHHMMSS = 11;
        /**
         * 循环任务-年级别的循环
         */
        int LOOP_YEAR = 20;
        /**
         * 循环任务-月级别的循环
         */
        int LOOP_MONTH = 21;
        /**
         * 循环任务-天级别的循环
         */
        int LOOP_DAY = 22;
        /**
         * 循环任务-小时级别的循环
         */
        int LOOP_HOUR = 23;
    }

    /**
     * 任务分类
     */
    interface TaskClassify {
        /**
         * 个人任务
         */
        Integer PERSONAL = 1;
        /**
         * 家庭任务
         */
        Integer FAMILY = 2;
        /**
         * 工作任务
         */
        Integer WORK = 3;
    }

    /**
     * 任务完成状态
     */
    interface TaskFinish {
        /**
         * 未完成，还没到执行的时间或者一直在执行的任务
         * 每次任务完成应该判断是否还有后续
         */
        Integer UNACCOMPLISHED = 10;
        /**
         * 任务已经超时逾期，还未完成
         * 循环任务和定时任务都可能进入到逾期，循环任务进入到逾期会暂停后续的循环调度
         */
        Integer OVERDUE = 11;
        /**
         * 任务进行中
         * 因为任务是一天中的，所以，如果在在当天，应该是在进行中
         */
        Integer RUN = 12;
        /**
         * 任务完成
         * 正常的完成，可能提前完成，也可能正好当天完成
         * 只会有固定任务，不会有循环任务进入，循环任务只会未完成或者已逾期或者已终止
         */
        Integer FINISH = 20;
        /**
         * 逾期，但已经已完成
         * 这里只会有固定任务，不会有循环任务逾期已完成，当循环任务恢复就变成未完成了
         */
        Integer OVERDUE_FINISH = 21;
        /**
         * 任务停止，用户已经终止该任务继续执行。
         * 这里主要是循环任务，但预计使用也比较少，可能
         */
        Integer STOP = 90;
    }

    /**
     * 家庭作业类型
     */
    interface HomeworkType {
        /**
         * 当天必须完成
         */
        Integer SAME_DAY = 1;
        /**
         * 周期性，比如2天一次，一天一次
         */
        Integer CYCLE = 2;
        /**
         * 限时
         * 在规定时间完成即可
         */
        Integer LIMITED_TIME = 3;
    }

    /**
     * 作业状态
     */
    interface HomeworkStatus {
        /**
         * 等待执行
         */
        Integer WAIT = 10;
        /**
         * 进行中
         */
        Integer RUN = 20;
        /**
         * 已完成
         */
        Integer COMPLETE = 90;
        /**
         * 已延期
         */
        Integer DELAY = 92;
        /**
         * 延期完成
         */
        Integer DELAYED_COMPLETION = 91;
        /**
         * 停止
         */
        Integer STOP = 93;
    }

    /**
     * 作业是否已检查
     */
    interface HomeworkCheck {
        /**
         * 未检查
         */
        Integer NO = 1;
        /**
         * 永久不检查
         */
        Integer PERMANENT = 2;
        /**
         * 已检查
         */
        Integer CHECK = 3;
    }
}
